7
תגובות

אבטחה למערכת הצבעות

פתח yotamN ,
אני עובד על מערכת תחרות שיהיה ניתן להצביע לכל מועמד, לא אכפת לי אם הם יצביעו לכמה מועמדים אבל השאלה שלי היא איך אני יכול לדאוג שהם יצביעו רק פעם ביום, חשבתי על Cookies אבל אז הם יוכלו למחוק את ה Cookies ולהצביע שוב, אז איזה דרך הכי טובה?

7 תשובות

avatar ענה OrelBeY ב 04 לינואר 2014 #

אם מדובר במערכת שאסור שתהיה רמאות בכלל - יש צורך לדרוש מכל המצביעים להירשם לאתר. ועכשיו זה הרבה יותר קל בשבילך לשלוט בזה. בהנחה שיש לך טבלת מסד נתונים לסקר וטבלה למשתמשים. צור טבלה עם השדות הבאים: ID של משתמש, ID של סקר, תאריך הצבעה אחרון (של אותו המשתמש בסקר הזה).
עכשיו, בכל פעם שמשתמש ינסה להצביע:
בדוק אם קיימת רשומה בטבלה עם הערכים של המשתמש והסקר הספציפיים האלה.
1. אם לא - אין שום בעיה. רשום את ההצבעה שלו והכנס גם רשומה לטבלה שיצרת מקודם, ובה רשום את זמן ההצבעה (כולל שעה ודקות...).
2. אם כן, סימן שהוא כבר הצביע בעבר בסקר הזה. בדוק את ההפרש בין התאריך הנוכחי לתאריך ההצבעה.
2.1. אם ההפרש גדול מ-24 שעות (או שווה ל-24 שעות, נניח), רשום את ההצבעה שלו, ושנה את תאריך ההצבעה האחרון בטבלה שיצרת מקודם.
2.2. אחרת - אם ההפרש קטן מ-24 שעות - מנע מהמשתמש להצביע שוב.

אם מדובר במערכת שלא כדאי לדרוש מהמצביעים להירשם, ורוצים שזה יהיה קליל יותר - אין באמת דרך לכפות את זה, אבל אפשר לעשות את אותו התהליך שפירטתי עם עוגיות במקום עם מסד נתונים. מובן שתמיד יהיה אפשר לרמות, אבל לא כולם ידעו את זה. (דרך נוספת לרמות, שפחות או יותר כולם ידעו, היא פשוט להיכנס ממחשב אחר.)

avatar ענה yotamN ב 04 לינואר 2014 #

@OrelBeY האמת שלא כל כל חשוב אם יצביעו עוד פעם, לא ברמה שצריך ליצור משתמש וטבלה בשביל זה, חשבתי על דרך אבל היא מעמיסה על השרת מאוד, ליצור session לכל יום עם ID מיוחד ליום ואז לבדוק אם ה Session קיים אבל כנראה שאני ישאר עם ה Cookies

avatar ענה OrelBeY ב 04 לינואר 2014 #

שכחתי להזכיר שכדאי יהיה לנקות את הטבלה כל כמה זמן, כי אין צורך לשמור את תאריך ההצבעה האחרון אם הוא אחרי 24 שעות. אם תחשוב על זה יותר תגלה שזו דווקא שיטה אפקטיבית ביותר, שלא תיקח יותר מדי תמורת מה שהיא מציעה. אבל אם זה באמת לא חשוב - פשוט תישאר עם עוגיות.
ואגב, סשן לא יחזיק כל היום. (קרא את הקטע תחת הכותרת "אורך החיים של סשן".)

avatar ענה Splash ב 04 לינואר 2014 #

בעקרון בד"כ בתחרויות מהסוג הזה משתמשים באייפי. בודקים אם האייפי מופיע במסד ואם הוא מופיע האם הוא הצביע באותו היום\24 שעות אחרונות [תלוי בך].
אך ניתן לעקוף זאת בקלות ע"י שינוי האייפי.
אני מציע לך להגביל את כמות ההצבעות לפרק זמן מסוים כלומר שלא יהיה ניתן להצביע לאותו מתמודד יותר מ X פעמים בפרק זמן של 10 דקות על מנת למנוע רמאויות.
ובנוסף תנסה לחשוב על טריקים נוספים כמו בנוסף לבדיקה במסד להוסיף גם סשן למשתמש ככה שאם הוא שכח למחוק ושינה אייפי אז זה עדיין לא יתן לו להצביע,לבדוק אם אותו אדם מנסה להצביע תחת פרוקסי וכו'

avatar ענה mmh19 ב 07 לינואר 2014 #

יש כאן באתר מדריך לטופס יצירת קשר,
בחלק החמישי שלו יש קטע להגנה מפני ספאם, תשמש בזה לצרכים שלך.

avatar ענה OrelBeY ב 11 לינואר 2014 #

@mmh19 זה בדיוק מה שאמרתי, מלבד החלק של שימוש בכתובות IP במקום מערכת משתמשים. כמו ש-Splash כבר אמר, אפשר לעקוף את זה בקלות. את הפתרון היעיל ביותר כבר אמרתי. (הדרך היחידה לעקוף אותו היא באמצעות רישום משתמשים נוספים השייכים לאותו אדם, וזו כבר בעיה אחרת.) רק צריך לחשוב - האם זה יותר מדי לבקש ממצביעים להירשם? עקרונית כל דף הוא דף נחיתה פוטנציאלי, וכך גם עמוד ההצבעה (אלא אם כן הוא חסום לכניסה ציבורית), אבל השאלה היא - האם ההצבעה מיועדת למשתמשים של האתר, או סתם לגולשים? במקרה השני קרוב לוודאי שלא נרצה לדרוש מהם יותר מכמה לחיצות (אחרת יש הרבה סיכויים שהם פשוט יעזבו), ואז צריך לבחור בין דרכי אבטחה שונות. צריכים לזכור שדרכים אחרות אמנם לא יגנו על המערכת ב-100%, אבל לפעמים אפשר וכדאי לוותר על רמת האבטחה בהתאם לצורך.

נ.ב. ערכתי את הכותרת של הדיון ("אבטחה למערכת הצבעות") במטרה לשקף את הדיון שהתפתח כאן, ולא להתמקד במקרה ספציפי ("הצבעה פעם ביום").

avatar ענה raslin ב 12 לינואר 2014 #

מניסיון ארוך שנים במיוחד בנושא הזה, של למנוע הרשמה כפולה,
אין דרך מוחלטת!! כל מה שתעשה אפשר לרמות ויחסית בקלות,
אפשר להיות יצירתי ולהוסיף עוד שכבות, אבל ל100% זה לא יגיע, ולא קרוב לזה,

כמה פתרונות,
תוכל לעשות הצבעה דרך מספר טלפון, או אימות טלפוני בסמס, ואז כמה כבר טלפונים כל אדם מחזיק? אז פה זה איפשהו מגביל אותם,
או התחברות מול פייסבוק, ולאשר בהרשמה רק חשבונות פייסבוק מאומתים

ואז פייסבוק יעשו בשבילך את העבודה, וכך תמנע 99.9% מהבעיות האלה.